﻿package org.cshoo.common.util;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

/**
 * 本文件代码源自互联网,在此未作实质性的改动
 * @author 佚名
 * 2012年10月12日 杨翼 创建
 * @param <T>
 */
public class SortList<T>{
	
	/**
	 * 对list进行排序
	 * 注意：日期的排序是先通过格式转换再来排序的，否则将不能有正确的结果。 
	 * @param list
	 * @param method
	 * @param sort 排序方式 "desc"为倒序，"asc"为正序(也可传null，或者其他字符串)
	 */
	public void Sort(List<T> list, final String method, final String sort){
		Collections.sort(list, new Comparator() {			
		    public int compare(Object a, Object b) {
		    	int ret = 0;
		    	try{
			    	Method m1 = ((T)a).getClass().getMethod(method, null);
			    	Method m2 = ((T)b).getClass().getMethod(method, null);
			    	if(sort != null && "desc".equals(sort))//倒序
			    		ret = m2.invoke(((T)b), null).toString().compareTo(m1.invoke(((T)a), null).toString());	
			    	else//正序
			    		ret = m1.invoke(((T)a), null).toString().compareTo(m2.invoke(((T)b), null).toString());
		    	}catch(NoSuchMethodException ne){
		    		ne.printStackTrace();
				}catch(IllegalAccessException ie){
					ie.printStackTrace();
				}catch(InvocationTargetException ite){
					ite.printStackTrace();
				}
		    	return ret;
		    }
		 });
	}
}